ssh -L
是 ssh
命令的一个重要选项,用于创建本地端口转发(Local Port Forwarding)。下面为你详细介绍其相关内容:
基本原理
本地端口转发允许你将本地主机上的一个端口转发到远程服务器上的另一个地址和端口。当你在本地主机上访问指定的本地端口时,SSH 客户端会将请求通过 SSH 连接转发到远程服务器,然后由远程服务器将请求转发到指定的目标地址和端口。
命令语法
ssh -L [本地地址:]本地端口:目标地址:目标端口 远程服务器地址
参数说明
- 本地地址:可选参数,指定本地监听的地址。如果省略,则默认监听本地的所有地址(
0.0.0.0
)。通常情况下,如果你只想让本地主机访问转发的端口,可以使用127.0.0.1
。 - 本地端口:本地主机上用于监听的端口号。
- 目标地址:远程服务器要转发请求到的目标主机地址。可以是 IP 地址或域名。
- 目标端口:目标主机上要访问的端口号。
- 远程服务器地址:SSH 连接的目标服务器地址,可以是 IP 地址或域名。
使用示例
示例 1:访问远程服务器上的服务
假设你有一台远程服务器 example.com
,该服务器上运行着一个 Web 服务,监听在 8080
端口。你想在本地通过 8888
端口访问这个服务,可以使用以下命令:
ssh -L 8888:localhost:8080 user@example.com
解释:
8888
:本地监听的端口。localhost
:目标地址,由于 Web 服务运行在远程服务器本地,所以使用localhost
。8080
:目标端口,即远程服务器上 Web 服务监听的端口。user@example.com
:SSH 连接的目标服务器地址,user
是远程服务器的用户名。
命令执行后,你可以在本地浏览器中访问 http://127.0.0.1:8888
来访问远程服务器上的 Web 服务。
示例 2:通过跳板机访问内部网络服务
假设你有一台跳板机 jump.example.com
,你需要通过这台跳板机访问内部网络中的一台服务器 internal.example.com
上的 MySQL 服务(监听在 3306
端口)。你可以使用以下命令:
ssh -L 3307:internal.example.com:3306 user@jump.example.com
解释:
3307
:本地监听的端口。internal.example.com
:目标地址,即内部网络中 MySQL 服务器的地址。3306
:目标端口,即 MySQL 服务监听的端口。user@jump.example.com
:SSH 连接的目标服务器地址,user
是跳板机的用户名。
命令执行后,你可以在本地使用 MySQL 客户端连接到 127.0.0.1:3307
来访问内部网络中的 MySQL 服务。
注意事项
- 执行
ssh -L
命令时,需要确保你有远程服务器的 SSH 访问权限。 - 如果本地端口已经被其他程序占用,命令将无法正常执行,需要选择一个未被使用的端口。
- 本地端口转发只能在 SSH 连接保持打开的状态下工作,关闭 SSH 连接后,转发将停止。